Creating applications or systems from reusable components is common as a means to accelerate the delivery of solutions and reduce cost. Tracking the evolution of systems over time requires versioning, both for individual units of data and for configurations. The use of versioning provides the ability to view the history of individual units of data and compare any two versions of data to identify the changes between them, and the ability to view the history of a configuration to see how the data has changed over time. Today, the primary means of managing and tracking evolution of a system is via a configuration management system. A configuration management system requires a user to manually manage workspaces, and manually check out and check in data, assign new versions to the data, etc.